﻿#pragma warning disable IDE1006
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WUDI.ECharts.Legend
{
	/// <summary>
	/// 图例组件
	/// <para>
	/// 图例组件展现了不同系列的标记(symbol)，颜色和名字
	/// </para>
	/// <para>
	/// 可以通过点击图例控制哪些系列不显示
	/// </para>
	/// <para>
	/// ECharts 3 中单个 echarts 实例中可以存在多个图例组件，会方便多个图例的布局
	/// </para>
	/// <para>
	/// 当图例数量过多时，可以使用 legend.type
	/// </para>
	/// <para>
	/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
	/// </para>
	/// </summary>
	public class Legend
	{

		/// <summary>
		/// plain
		/// <para>
		/// 普通图例
		/// </para>
		/// <para>
		/// 缺省就是普通图例
		/// </para>
		/// <para>
		/// scroll
		/// </para>
		/// <para>
		/// 可滚动翻页的图例
		/// </para>
		/// <para>
		/// 当图例数量较多时可以使用
		/// </para>
		/// <para>
		/// 参见 legend.animationDurationUpdate
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// </summary>
		public dynamic type { get; set; } 

		/// <summary>
		/// 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引用组件。
		/// </summary>
		public dynamic id { get; set; } 

		public dynamic show { get; set; }  = true;

		/// <summary>
		/// 所有图形的 zlevel 值
		/// <para>
		/// zlevel用于 Canvas 分层，不同zlevel值的图形会放置在不同的 Canvas 中，Canvas 分层是一种常见的优化手段
		/// </para>
		/// <para>
		/// 我们可以把一些图形变化频繁（例如有动画）的组件设置成一个单独的zlevel
		/// </para>
		/// <para>
		/// 需要注意的是过多的 Canvas 会引起内存开销的增大，在手机端上需要谨慎使用以防崩溃
		/// </para>
		/// <para>
		/// zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面
		/// </para>
		/// </summary>
		public dynamic zlevel { get; set; }  = 0;

		/// <summary>
		/// 组件的所有图形的z值
		/// <para>
		/// 控制图形的前后顺序
		/// </para>
		/// <para>
		/// z值小的图形会被z值大的图形覆盖
		/// </para>
		/// <para>
		/// z相比zlevel优先级更低，而且不会创建新的 Canvas
		/// </para>
		/// </summary>
		public dynamic z { get; set; }  = 2;

		/// <summary>
		/// 图例组件离容器左侧的距离
		/// <para>
		/// left 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比，也可以是 left, center, right
		/// </para>
		/// <para>
		/// 如果 left 的值为left, center, right，组件会根据相应的位置自动对齐
		/// </para>
		/// </summary>
		public dynamic left { get; set; }  = "auto";

		/// <summary>
		/// 图例组件离容器上侧的距离
		/// <para>
		/// top 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比，也可以是 top, middle, bottom
		/// </para>
		/// <para>
		/// 如果 top 的值为top, middle, bottom，组件会根据相应的位置自动对齐
		/// </para>
		/// </summary>
		public dynamic top { get; set; }  = "auto";

		/// <summary>
		/// 图例组件离容器右侧的距离
		/// <para>
		/// right 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比
		/// </para>
		/// <para>
		/// 默认自适应
		/// </para>
		/// </summary>
		public dynamic right { get; set; }  = "auto";

		/// <summary>
		/// 图例组件离容器下侧的距离
		/// <para>
		/// bottom 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比
		/// </para>
		/// <para>
		/// 默认自适应
		/// </para>
		/// </summary>
		public dynamic bottom { get; set; }  = "auto";

		/// <summary>
		/// 图例组件的宽度。默认自适应。
		/// </summary>
		public dynamic width { get; set; }  = "auto";

		/// <summary>
		/// 图例组件的高度。默认自适应。
		/// </summary>
		public dynamic height { get; set; }  = "auto";

		/// <summary>
		/// 图例列表的布局朝向。
		/// horizontal
		/// vertical
		/// </summary>
		public WUDI.ECharts.Orient orient { get; set; }  = WUDI.ECharts.Orient.horizontal;

		/// <summary>
		/// 图例标记和文本的对齐
		/// <para>
		/// 默认自动，根据组件的位置和 orient 决定，当组件的 orient
		/// </para>
		/// <para>
		/// #legend.orient 为 vertical）的时候为右对齐，即为 right
		/// </para>
		/// <para>
		/// auto
		/// </para>
		/// <para>
		/// left
		/// </para>
		/// <para>
		/// right
		/// </para>
		/// </summary>
		public WUDI.ECharts.Align align { get; set; }  = WUDI.ECharts.Align.auto;

		/// <summary>
		/// 图例内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距。
		/// <para>number/Array</para>
		/// </summary>
		public dynamic padding { get; set; }  = 5;

		/// <summary>
		/// 图例每项之间的间隔。横向布局时为水平间隔，纵向布局时为纵向间隔。
		/// </summary>
		public dynamic itemGap { get; set; }  = 10;

		/// <summary>
		/// 图例标记的图形宽度。
		/// </summary>
		public dynamic itemWidth { get; set; }  = 25;

		/// <summary>
		/// 图例标记的图形高度。
		/// </summary>
		public dynamic itemHeight { get; set; }  = 14;

		/// <summary>
		/// 如果图标（可能来自系列的 symbol 或用户自定义的 legend.data.icon）是 path:// 的形式，是否在缩放时保持该图形的长宽比。
		/// </summary>
		public dynamic symbolKeepAspect { get; set; }  = true;

		/// <summary>
		/// 用来格式化图例文本，支持字符串模板和回调函数两种形式。
		/// <para>string/Function</para>
		/// </summary>
		public dynamic formatter { get; set; } 

		/// <summary>
		/// 图例选择的模式，控制是否可以通过点击图例改变系列的显示状态
		/// <para>
		/// 默认开启图例选择，可以设成 false 关闭
		/// </para>
		/// <para>
		/// 除此之外也可以设成 single 或者  multiple 使用单选或者多选模式
		/// </para>
		/// </summary>
		public dynamic selectedMode { get; set; }  = true;

		/// <summary>
		/// 图例关闭时的颜色。
		/// </summary>
		public dynamic inactiveColor { get; set; }  = "#ccc";

		/// <summary>
		/// 图例选中状态表。
		/// </summary>
		public dynamic selected { get; set; } 

		/// <summary>
		/// 图例的公用文本样式。
		/// </summary>
		public WUDI.ECharts.Legend.TextStyle textStyle { get; set; } 

		public dynamic tooltip { get; set; } 

		/// <summary>
		/// 图例项的 icon
		/// <para>
		/// ECharts 提供的标记类型包括
		/// </para>
		/// <para>
		/// circle, rect, roundRect, triangle, diamond, pin, arrow, none
		/// </para>
		/// <para>
		/// 可以通过 image://url 设置为图片，其中 URL 为图片的链接，或者 dataURI
		/// </para>
		/// <para>
		/// 可以通过 path:// 将图标设置为任意的矢量路径
		/// </para>
		/// <para>
		/// 这种方式相比于使用图片的方式，不用担心因为缩放而产生锯齿或模糊，而且可以设置为任意颜色
		/// </para>
		/// <para>
		/// 路径图形会自适应调整为合适的大小
		/// </para>
		/// <para>
		/// 路径的格式参见 SVG PathData
		/// </para>
		/// <para>
		/// <see href="http://www.w3.org/TR/SVG/paths.html#PathData"/>
		/// </para>
		/// <para>
		/// 可以从 Adobe Illustrator 等工具编辑导出
		/// </para>
		/// </summary>
		public dynamic icon { get; set; } 

		/// <summary>
		/// 图例背景色，默认透明
		/// <para>
		/// 颜色可以使用 RGB 表示，比如 rgb(128, 128, 128)   ，如果想要加上 alpha 通道，可以使用 RGBA，比如 rgba(128, 128, 128, 0.5)，也可以使用十六进制格式，比如 #ccc
		/// </para>
		/// </summary>
		public dynamic backgroundColor { get; set; }  = "transparent";

		/// <summary>
		/// 图例的边框颜色。支持的颜色格式同 backgroundColor。
		/// </summary>
		public dynamic borderColor { get; set; }  = "#ccc";

		/// <summary>
		/// 图例的边框线宽。
		/// </summary>
		public dynamic borderWidth { get; set; }  = 1;

		/// <summary>
		/// 圆角半径，单位px，支持传入数组分别指定 4 个圆角半径。
		/// 如:
		/// <para>number/Array</para>
		/// </summary>
		public dynamic borderRadius { get; set; }  = 0;

		/// <summary>
		/// 图形阴影的模糊大小
		/// <para>
		/// 该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果
		/// </para>
		/// <para>
		/// 注意
		/// </para>
		/// <para>
		/// 此配置项生效的前提是，设置了 show: true 以及值不为 tranparent 的背景色 backgroundColor
		/// </para>
		/// </summary>
		public dynamic shadowBlur { get; set; } 

		/// <summary>
		/// 阴影颜色。支持的格式同color。
		/// 注意。此配置项生效的前提是，设置了 show: true。
		/// </summary>
		public dynamic shadowColor { get; set; } 

		/// <summary>
		/// 阴影水平方向上的偏移距离。
		/// 注意。此配置项生效的前提是，设置了 show: true。
		/// </summary>
		public dynamic shadowOffsetX { get; set; }  = 0;

		/// <summary>
		/// 阴影垂直方向上的偏移距离。
		/// 注意。此配置项生效的前提是，设置了 show: true。
		/// </summary>
		public dynamic shadowOffsetY { get; set; }  = 0;

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 图例当前最左上显示项的 dataIndex
		/// </para>
		/// <para>
		/// setOption 时指定此项的话，可决定当前图例滚动到哪里
		/// </para>
		/// <para>
		/// 但是，如果仅仅想改变图例翻页，一般并不调用 setOption（因为这太重量了），仅仅使用 action legendScroll
		/// </para>
		/// <para>
		/// api.html#action.legend.legendScroll 即可
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// </summary>
		public dynamic scrollDataIndex { get; set; }  = 0;

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 图例控制块中，按钮和页信息之间的间隔
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// </summary>
		public dynamic pageButtonItemGap { get; set; }  = 5;

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 图例控制块和图例项之间的间隔
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// </summary>
		public dynamic pageButtonGap { get; set; } 

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// start
		/// </para>
		/// <para>
		/// 控制块在左或上
		/// </para>
		/// <para>
		/// end
		/// </para>
		/// <para>
		/// 控制块在右或下
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// </summary>
		public WUDI.ECharts.PageButtonPosition pageButtonPosition { get; set; }  = WUDI.ECharts.PageButtonPosition.end;

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 图例控制块中，页信息的显示格式
		/// </para>
		/// <para>
		/// 默认为 {current}/{total}，其中 {current} 是当前页号（从 1 开始计数），{total} 是总页数
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// <para>string/Function</para>
		/// </summary>
		public dynamic pageFormatter { get; set; }  = "{current}/{total}";

		/// <summary>
		/// legend.type。#legend.type 为 scroll 时有效。
		/// 图例控制块的图标。
		/// </summary>
		public WUDI.ECharts.Legend.PageIcons pageIcons { get; set; } 

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 翻页按钮的颜色
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// </summary>
		public dynamic pageIconColor { get; set; }  = "#2f4554";

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 翻页按钮不激活时（即翻页到头时）的颜色
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// </summary>
		public dynamic pageIconInactiveColor { get; set; }  = "#aaa";

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 翻页按钮的大小
		/// </para>
		/// <para>
		/// 可以是数字，也可以是数组，如 [10, 3]，表示 [宽，高]
		/// </para>
		/// <para>
		/// 参见 滚动图例（水平）
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=radar2&amp;edit=1&amp;reset=1"/>
		/// </para>
		/// <para>number/Array</para>
		/// </summary>
		public dynamic pageIconSize { get; set; }  = 15;

		/// <summary>
		/// legend.type
		/// <para>
		/// #legend.type 为 scroll 时有效
		/// </para>
		/// <para>
		/// 图例页信息的文字样式
		/// </para>
		/// </summary>
		public WUDI.ECharts.Legend.PageTextStyle pageTextStyle { get; set; } 

		/// <summary>
		/// 图例翻页是否使用动画。
		/// </summary>
		public dynamic animation { get; set; } 

		/// <summary>
		/// 图例翻页时的动画时长。
		/// </summary>
		public dynamic animationDurationUpdate { get; set; }  = 800;

		public WUDI.ECharts.Legend.Emphasis.Emphasis emphasis { get; set; } 

		/// <summary>
		/// 从 v4.4.0 开始支持
		/// <para>
		/// 图例组件中的选择器按钮，目前包括全选和反选两种功能
		/// </para>
		/// <para>
		/// 默认不显示，用户可手动开启，也可以手动配置每个按钮的标题
		/// </para>
		/// <para>boolean/Array</para>
		/// </summary>
		public dynamic selector { get; set; }  = false;

		/// <summary>
		/// 从 v4.4.0 开始支持
		/// 选择器按钮的文本标签样式，默认显示。
		/// </summary>
		public WUDI.ECharts.Legend.SelectorLabel selectorLabel { get; set; } 

		/// <summary>
		/// 从 v4.4.0 开始支持
		/// <para>
		/// 选择器的位置，可以放在图例的尾部或者头部，对应的值分别为 end 和 start
		/// </para>
		/// <para>
		/// 默认情况下，图例横向布局的时候，选择器放在图例的尾部
		/// </para>
		/// <para>
		/// 图例纵向布局的时候，选择器放在图例的头部
		/// </para>
		/// </summary>
		public dynamic selectorPosition { get; set; }  = "auto";

		/// <summary>
		/// 从 v4.4.0 开始支持
		/// 选择器按钮之间的间隔。
		/// </summary>
		public dynamic selectorItemGap { get; set; }  = 7;

		/// <summary>
		/// 从 v4.4.0 开始支持
		/// 选择器按钮与图例组件之间的间隔。
		/// </summary>
		public dynamic selectorButtonGap { get; set; }  = 10;

	}
}